<template>
  <upload-excel
    :on-success="handleSuccess"
  />
</template>

<script>
import { reqAddEmployeeBatch } from '@/api/employees'
export default {
  computed: {
    // 获取用户是从哪个板块过来
    type() {
      return this.$route.query.type
    }
  },
  methods: {
    /**
     * 文件上传成功后被调用
     * 作用: 把从文件中读取到的内容返回
     */
    handleSuccess({ header, results }) {
      console.log(header, results)

      // 1. 批量上传员工
      if (this.type === 'user') {
        this.handleEmployyesUpload(header, results)
      }

      // 2. 批量上传薪资
      if (this.type === 'money') {
        // ...
      }
    },
    /**
     * Excel处理批量上传员工
     */
    async handleEmployyesUpload(header, results) {
      // 1. 中英文键名对照表
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber'
      }

      // 2. 遍历 -> 目的: 把数组中每个对象的 中文键名 换成 英文键名
      const newArr = []
      results.forEach((item) => {
        // 2.1 定义新对象
        const newObj = {}
        // 2.3 遍历
        for (const key in userRelations) {
          // 2.3.1 根据 同一个中文键 取出 英文键
          const englishKey = userRelations[key]
          // 2.3.2 根据 同一个中文键 取出 item中对应的值
          let value = ''
          // if (englishKey === 'timeOfEntry' || englishKey === 'correctionTime') {
          if (['timeOfEntry', 'correctionTime'].includes(englishKey)) {
            value = this.formatExcelDate(item[key], '-')
          } else {
            value = item[key]
          }

          // console.log(englishKey, value)
          // 2.3.3 组装
          newObj[englishKey] = value
        }
        // 2.2 把新对象装入新数组
        newArr.push(newObj)
      })

      // console.log(newArr)

      // 3. 发起请求
      const res = await reqAddEmployeeBatch(newArr)
      this.$message.success(res.message)

      // 4. 返回员工列表页
      this.$router.push('/employees')
    },
    /**
     * 格式化处理Excel中的日期
     */
    formatExcelDate(numb, format) {
      const time = new Date(numb * 24 * 3600000 + 1) // 毫秒
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }
}
</script>

<style>

</style>
